package bean.dao;

import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import dominio.Proveedor;

public class HibernateProveedorDAO {

	private static HibernateProveedorDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;

	public static HibernateProveedorDAO getInstancia() {
		if (instancia == null) {
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateProveedorDAO();
		}
		return instancia;
	}

	private Session getSession() {
		if (session == null)
			session = sf.openSession();
		return session;
	}

	public void closeSession() {
		if (session != null)
			session.close();
	}

	public void agregarProveedor(Proveedor prov) {
		Session s = getSession();
		s.beginTransaction();
		s.persist(prov);
		s.flush();
		s.getTransaction().commit();

	}

	public String getUltimoId() {
		Session s = getSession();
		String o = (String) s.createQuery(
				"select max(prov.idProveedor) from Proveedor prov")
				.uniqueResult();
		return o;

	}

	public void eliminarProveedor(Proveedor prov) {
		Session s = getSession();
		s.beginTransaction();
		s.delete(prov);
		s.flush();
		s.getTransaction().commit();
	}

	public Proveedor loadProveedor(Proveedor prov) {
		Session s = this.getSession();

		s.load(prov, prov.getIdProveedor());
		return prov;

	}

	@SuppressWarnings("unchecked")
	public List<Proveedor> listarProveedors() {

		Session s = this.getSession();
		List<Proveedor> lista = s.createQuery("from Proveedor").list();
		return lista;
	}

	public void modificarProveedor(Proveedor prov) {
		
		Session s = getSession();
		s.beginTransaction();
		s.update(prov);
		s.flush();
		s.getTransaction().commit();
	}

	@SuppressWarnings("unchecked")
	public List<String> listaId() {
		Session s = getSession();
		List<String> lista = s.createQuery(
				"select prov.idProveedor from Proveedor prov").list();
		s.clear();
		return lista;
	}

	public Proveedor buscarProveedor(String cuit) {
		Session s = getSession();
		Proveedor prov = (Proveedor) s.createQuery("select prov from Proveedor prov where prov.cuit = '"+cuit+"'")
				.uniqueResult();
		s.clear();
		return prov;

	}

	public String imprimirProveedor(String id) {
		Session s = getSession();

		Proveedor prov = (Proveedor) s.getNamedQuery("imprimir Proveedor")
				.setString("id", id).uniqueResult();

		String str;
		if (prov != null) {

			str = "numero de Proveedor: " + prov.getIdProveedor()
					+ "\nrazon social: " + prov.getRazonSocial() + "\npais: "
					+ prov.getOrigen();
		}

		else
			str = null;

		s.clear();
		return str;

	}
}
